package com.ruoyi.business.service.impl;

import java.util.List;
import java.util.Set;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.service.SysPermissionService;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.mapper.TMessageMapper;
import com.ruoyi.business.domain.TMessage;
import com.ruoyi.business.service.ITMessageService;

/**
 * 消息内容Service业务层处理
 * 
 * @author laoguo
 * @date 2025-08-12
 */
@Service
public class TMessageServiceImpl implements ITMessageService 
{
    @Autowired
    private TMessageMapper tMessageMapper;

    @Autowired
    private SysPermissionService permissionService;

    @Autowired
    private ISysUserService userService;

    /**
     * 查询消息内容
     * 
     * @param messageId 消息内容主键
     * @return 消息内容
     */
    @Override
    public TMessage selectTMessageByMessageId(Long messageId)
    {
        return tMessageMapper.selectTMessageByMessageId(messageId);
    }

    /**
     * 查询消息内容列表
     * 
     * @param tMessage 消息内容
     * @return 消息内容
     */
    @Override
    public List<TMessage> selectTMessageList(TMessage tMessage)
    {
        return tMessageMapper.selectTMessageList(tMessage);
    }

    /**
     * 新增消息内容
     * 
     * @param tMessage 消息内容
     * @return 结果
     */
    @Override
    public int insertTMessage(TMessage tMessage)
    {
        tMessage.setCreateTime(DateUtils.getNowDate());
        return tMessageMapper.insertTMessage(tMessage);
    }

    /**
     * 修改消息内容
     * 
     * @param tMessage 消息内容
     * @return 结果
     */
    @Override
    public int updateTMessage(TMessage tMessage)
    {
        return tMessageMapper.updateTMessage(tMessage);
    }

    /**
     * 批量删除消息内容
     * 
     * @param messageIds 需要删除的消息内容主键
     * @return 结果
     */
    @Override
    public int deleteTMessageByMessageIds(Long[] messageIds)
    {
        return tMessageMapper.deleteTMessageByMessageIds(messageIds);
    }

    /**
     * 删除消息内容信息
     * 
     * @param messageId 消息内容主键
     * @return 结果
     */
    @Override
    public int deleteTMessageByMessageId(Long messageId)
    {
        return tMessageMapper.deleteTMessageByMessageId(messageId);
    }

    // 在 TMessageServiceImpl.java 中实现
    @Override
    public List<TMessage> selectBapiMessageList(TMessage tMessage) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = userService.selectUserByUserName(SecurityUtils.getUsername());
        Set<String> roles = permissionService.getRolePermission(user);

        // 根据角色设置筛选条件
        if (roles.contains("partner")) {
            // 合作商可以查看所有消息和指定给合作商的消息
            tMessage.getParams().put("includeTypes", "0,2");
        } else if (roles.contains("distributor")) {
            // 经销商可以查看所有消息和指定给经销商的消息
            tMessage.getParams().put("includeTypes", "0,3");
        } else {
            // 如果既不是合作商也不是经销商，但登录了B端，可能存在问题，或者只给一个默认消息类型
            throw new ServiceException("无权查看消息");
        }

        return tMessageMapper.selectTMessageList(tMessage);
    }
}
